package notes.java.thread;

public class Jmm {
	
	// 主内存中的全局变量
//	public static boolean flag = false;
	// volatile 内存可见性
	public static volatile boolean flag = false;
	
	public static void main(String[] args) throws InterruptedException {
		
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				while(!flag) {
					// 第一个线程获取到全局变量flag，一直循环
					// 不加volatile 时一直死循环
				}
				System.out.println("第一个线程执行完成！！！");
			}
		}).start();
		
		Thread.sleep(2000);
		
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				preData();
			}
		}).start();
	}

	public static void preData() {
		flag = true; // 第二个线程修改全局变量，此时第一个线程是将全局变量flag复制了一份到工作内存中，主内存中的值修改了，工作内存的变量仍没有改变
		System.out.println("修改flag Ok");
	}
}
